home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-2 / Inter.Net 55-2.iso / Mandrake / mdkinst / usr / lib / perl5 / 5.00503 / vars.pm < prev   
Encoding:
Perl POD Document  |  2000-01-12  |  1.3 KB  |  44 lines

  1. package vars;
  2.  
  3. require 5.002;
  4.  
  5. # The following require can't be removed during maintenance
  6. # releases, sadly, because of the risk of buggy code that does
  7. # require Carp; Carp::croak "..."; without brackets dying
  8. # if Carp hasn't been loaded in earlier compile time. :-(
  9. # We'll let those bugs get found on the development track.
  10. require Carp if $] < 5.00450;
  11.  
  12. sub import {
  13.     my $callpack = caller;
  14.     my ($pack, @imports, $sym, $ch) = @_;
  15.     foreach $sym (@imports) {
  16.         ($ch, $sym) = unpack('a1a*', $sym);
  17.     if ($sym =~ tr/A-Za-Z_0-9//c) {
  18.         # time for a more-detailed check-up
  19.         if ($sym =~ /::/) {
  20.         require Carp;
  21.         Carp::croak("Can't declare another package's variables");
  22.         } elsif ($sym =~ /^\w+[[{].*[]}]$/) {
  23.         require Carp;
  24.         Carp::croak("Can't declare individual elements of hash or array");
  25.         } elsif ($^W and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
  26.         require Carp;
  27.         Carp::carp("No need to declare built-in vars");
  28.         }
  29.     }
  30.         *{"${callpack}::$sym"} =
  31.           (  $ch eq "\$" ? \$   {"${callpack}::$sym"}
  32.            : $ch eq "\@" ? \@   {"${callpack}::$sym"}
  33.            : $ch eq "\%" ? \%   {"${callpack}::$sym"}
  34.            : $ch eq "\*" ? \*   {"${callpack}::$sym"}
  35.            : $ch eq "\&" ? \&   {"${callpack}::$sym"}
  36.            : do {
  37.         require Carp;
  38.         Carp::croak("'$ch$sym' is not a valid variable name");
  39.          });
  40.     }
  41. };
  42.  
  43. 1;
  44.